#pragma once

/** This is the root node of the GUI **/

#include "gui/guimessage.h"
#include "gui/notificationmanager.h"
#include "gui/panel.h"
#include "gui/widget.h"


class Entity;

class Button;
class ButtonPanel;
class CityPanel;
class DataPanel;
class GUIMessage;
class Notification;
class ResearchPanel;
class CardPanel;
class TopPanel;

class GUI:public Widget{
    public:
        GUI();

        virtual std::string GetType(){ return "GUI"; }
        void Initialise(int width, int height);
        void Draw();
        void Pick();
        void Update();
        void BlankDisplay();
        void ClearDisplay();
        void EndTurn();

        void BuildGUI();

    protected:
        GUIMessage* ProcessMessage(GUIMessage* message);

    private:
        std::string last_tab;
        std::unique_ptr<CardPanel> bottom_book;
        std::unique_ptr<Panel> panel;
};

extern GUI* gui;
